import random
import functools

# 1. 为什么要用装饰器?
"""
目标: 在不改变原本函数的基础之上，
对函数执行前后进行自定义操作
"""
# # 定义装饰器
# def wapper(func):
#     def inner(*args, **kwargs):
#         return func(*args, **kwargs)
#     return inner


"""
如果做装饰器的时候，
只想要获取函数的原信息
添加上 @functools.wraps(func)
这个装饰器
"""
# # 定义装饰器
# def wapper(func):
#     @functools.wraps(func) # 作用 是将原来函数里头的信息赋值给下面这个inner函数
#     def inner(*args, **kwargs):
#         return func(*args, **kwargs)
#     return inner


""" 
@ 这个语法糖 功能：
1. 执行wrapper 函数，并将被装饰的函数作为参数 wapper(index)
2. 将第一步的返回值，重新赋值给 index = wapper(index)
"""
# # @wapper
# def index(a1):
#     return a1 + 1000
#
#
# print(index.__name__)  # 使用装饰器 inner
# print(index.__name__)  # 不使用装饰器 index
# print(index(10))  # 结果相同
#
# print(random.randrange(2))
# print(random.randrange(0,2))

# 2. 带参数的装饰器
"""
执行顺序
1. v1 = xx(666)
2. @v1
3. 新index = v1(老index)
"""
# @xx(666)
# def index(request):
#     return 123